package com.ht.api.bigtask.impl.qywx;

import com.ht.api.bigtask.BaseBigTask;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.open.OpenUtil;
import com.ht.api.service.WwxService;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 大任务：【企业微信】获取客服详情
 * @author asq
 * @createTime 2025年2月9日 18:12:41
 */
@Slf4j
public class QueryFollowUserInfoTask extends BaseBigTask {
	/** 接口ID：通讯录：读取成员 */
	private static final long API_ID = 1887375627414278144L;

	@Override
	protected void doExecute(String appId, JSONObject context, Entity bean) {
		// 如果本任务已完成，则不再重复执行
		if (isOver()) {
			log.info("[BigTask]本任务已完成，不再重复执行，任务名：QueryFollowUserInfoTask，【企业微信】获取客服详情");
			return;
		}
		long t = System.currentTimeMillis();
		
		// 从上下文中获取上一个任务查询到的客服数组
		JSONArray arr = context.getJSONArray("follow_user");
		
		// 执行自身任务
		for (int i = getPageNum(); i < arr.size(); i++) {
			// 组装接口参数
			JSONObject param = JSONUtil.createObj();
			param.set("userid", arr.getStr(i));
	        
	        // 调用接口
			String str = OpenUtil.call(appId, API_ID, param);
			
			// 写入租户库的open_data表
			JSONObject entity = JSONUtil.parseObj(str);
//			WwxService.setRealnameStatus(appId, entity);
			Db.insert(getTenantDs(appId), createOpenDataEntity(appId, API_ID, entity));
			
			// 记录任务进度（任务进度是每个任务节点各记各的，互不影响）
			saveInfo(PAGE_NUM_NAME, i + 1, bean);
		}
		log.info("[BigTask]完成【企业微信】获取客服详情，耗时：{}ms", (System.currentTimeMillis() - t));
	}
}
